/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package vista;

import controlador.DBManager;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
import java.io.File;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;

/**
 *
 * @author Z510
 */
public class MdiPrueba extends javax.swing.JFrame {

    JIntFicheros ficheros;
    JIntTablasBd tablas;
    JIntConectado conectado;

    //JFrameTablasBD tablas;
    //JFrameFicheros jfFich;
    JFrameCrearBd jfCrearBd;
    JFileChooser jfileChooser;

    public JIntTablasBd getTablas() {
        return tablas;
    }

    public void setTablas(JIntTablasBd tablas) {
        this.tablas = tablas;
        desktopPane.add(tablas);
        tablas.show();
    }

    public void setTablas(JIntTablasBd tablas, String dialogo) {
        this.tablas = tablas;
        tablas.setPadre(this);

        desktopPane.add(tablas);
        tablas.show();
        conectado.hide();
        tablas.setControl(1);
    }

    /**
     * Creates new form MdiPrueba
     */
    public MdiPrueba() {
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        initComponents();

        Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();

        jLabel2.setSize(pantalla);
        this.setMinimumSize(pantalla);

        String workingdir = System.getProperty("user.dir");
        jfileChooser = new JFileChooser(new File(workingdir));
        jfileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        jfileChooser.setFileFilter(new FileNameExtensionFilter("Archivos SQLite", "sqlite"));

        MenuDesconectarBD.setEnabled(false);
        MenuEjecutarComandoBD.setEnabled(false);
        MenuRenombrarBD.setEnabled(false);
        MenuPropiedadesBD.setEnabled(false);

        ficheros = new JIntFicheros();

        tablas = new JIntTablasBd();
        tablas.setPadre(this);

        conectado = new JIntConectado();
        conectado.setPadre(this);

        desktopPane.add(conectado);

        jfCrearBd = new JFrameCrearBd();
        jfCrearBd.setMymdi(this);

        this.setLocationRelativeTo(null);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jDesktopPane1 = new javax.swing.JDesktopPane();
        desktopPane = new javax.swing.JDesktopPane();
        jLabel2 = new javax.swing.JLabel();
        menuBar = new javax.swing.JMenuBar();
        fileMenu = new javax.swing.JMenu();
        MenuAbrirDom = new javax.swing.JMenuItem();
        MenuAbrirSax = new javax.swing.JMenuItem();
        jSeparator1 = new javax.swing.JPopupMenu.Separator();
        MenuAbrirTexto = new javax.swing.JMenuItem();
        MenuAbrirBinario = new javax.swing.JMenuItem();
        editMenu = new javax.swing.JMenu();
        MenuCrearBD = new javax.swing.JMenuItem();
        jSeparator2 = new javax.swing.JPopupMenu.Separator();
        MenuConectarBD = new javax.swing.JMenuItem();
        MenuDesconectarBD = new javax.swing.JMenuItem();
        jSeparator3 = new javax.swing.JPopupMenu.Separator();
        MenuEjecutarComandoBD = new javax.swing.JMenuItem();
        MenuRenombrarBD = new javax.swing.JMenuItem();
        MenuPropiedadesBD = new javax.swing.JMenuItem();
        helpMenu = new javax.swing.JMenu();
        MenuSalirSalir = new javax.swing.JMenuItem();
        aboutMenuItem = new javax.swing.JMenuItem();

        javax.swing.GroupLayout jDesktopPane1Layout = new javax.swing.GroupLayout(jDesktopPane1);
        jDesktopPane1.setLayout(jDesktopPane1Layout);
        jDesktopPane1Layout.setHorizontalGroup(
            jDesktopPane1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );
        jDesktopPane1Layout.setVerticalGroup(
            jDesktopPane1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel2.setFont(new java.awt.Font("Tahoma", 0, 48)); // NOI18N
        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel2.setText("BASE DE DATOS DE MOTOS");
        jLabel2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jLabel2.setMaximumSize(new java.awt.Dimension(1500, 1500));
        desktopPane.add(jLabel2);
        jLabel2.setBounds(0, 0, 730, 160);

        fileMenu.setMnemonic('f');
        fileMenu.setText("Ficheros");

        MenuAbrirDom.setMnemonic('o');
        MenuAbrirDom.setText("Abrir XML-DOM");
        MenuAbrirDom.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                MenuAbrirDomActionPerformed(evt);
            }
        });
        fileMenu.add(MenuAbrirDom);

        MenuAbrirSax.setMnemonic('s');
        MenuAbrirSax.setText("Abrir XML-SAX");
        MenuAbrirSax.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                MenuAbrirSaxActionPerformed(evt);
            }
        });
        fileMenu.add(MenuAbrirSax);
        fileMenu.add(jSeparator1);

        MenuAbrirTexto.setMnemonic('a');
        MenuAbrirTexto.setText("Abrir fichero de texto");
        MenuAbrirTexto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                MenuAbrirTextoActionPerformed(evt);
            }
        });
        fileMenu.add(MenuAbrirTexto);

        MenuAbrirBinario.setMnemonic('x');
        MenuAbrirBinario.setText("Abrir fichero binario");
        MenuAbrirBinario.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                MenuAbrirBinarioActionPerformed(evt);
            }
        });
        fileMenu.add(MenuAbrirBinario);

        menuBar.add(fileMenu);

        editMenu.setMnemonic('e');
        editMenu.setText("BDR");

        MenuCrearBD.setMnemonic('t');
        MenuCrearBD.setText("Crear");
        MenuCrearBD.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                MenuCrearBDActionPerformed(evt);
            }
        });
        editMenu.add(MenuCrearBD);
        editMenu.add(jSeparator2);

        MenuConectarBD.setMnemonic('y');
        MenuConectarBD.setText("Conectar....");
        MenuConectarBD.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                MenuConectarBDActionPerformed(evt);
            }
        });
        editMenu.add(MenuConectarBD);

        MenuDesconectarBD.setMnemonic('p');
        MenuDesconectarBD.setText("Desconectar");
        MenuDesconectarBD.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                MenuDesconectarBDActionPerformed(evt);
            }
        });
        editMenu.add(MenuDesconectarBD);
        editMenu.add(jSeparator3);

        MenuEjecutarComandoBD.setMnemonic('d');
        MenuEjecutarComandoBD.setText("Ejecutar comando");
        MenuEjecutarComandoBD.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                MenuEjecutarComandoBDActionPerformed(evt);
            }
        });
        editMenu.add(MenuEjecutarComandoBD);

        MenuRenombrarBD.setMnemonic('d');
        MenuRenombrarBD.setText("Renombrar");
        MenuRenombrarBD.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                MenuRenombrarBDActionPerformed(evt);
            }
        });
        editMenu.add(MenuRenombrarBD);

        MenuPropiedadesBD.setMnemonic('d');
        MenuPropiedadesBD.setText("Propiedades");
        MenuPropiedadesBD.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                MenuPropiedadesBDActionPerformed(evt);
            }
        });
        editMenu.add(MenuPropiedadesBD);

        menuBar.add(editMenu);

        helpMenu.setMnemonic('h');
        helpMenu.setText("Salir");

        MenuSalirSalir.setMnemonic('c');
        MenuSalirSalir.setText("Salir");
        MenuSalirSalir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                MenuSalirSalirActionPerformed(evt);
            }
        });
        helpMenu.add(MenuSalirSalir);

        aboutMenuItem.setMnemonic('a');
        aboutMenuItem.setText("About");
        helpMenu.add(aboutMenuItem);

        menuBar.add(helpMenu);

        setJMenuBar(menuBar);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(desktopPane, javax.swing.GroupLayout.DEFAULT_SIZE, 1241, Short.MAX_VALUE)
                .addGap(0, 0, 0))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(desktopPane, javax.swing.GroupLayout.DEFAULT_SIZE, 609, Short.MAX_VALUE)
                .addGap(0, 0, 0))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void MenuAbrirBinarioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuAbrirBinarioActionPerformed

        if (!ficheros.isVisible()) {
            desktopPane.add(ficheros);
            ficheros.show();
        }
        ficheros.setMenuAbrirBinario();
//        jfFich.setVisible(true);
    }//GEN-LAST:event_MenuAbrirBinarioActionPerformed

    private void MenuAbrirDomActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuAbrirDomActionPerformed
        if (!ficheros.isVisible()) {
            desktopPane.add(ficheros);
            ficheros.show();
        }
        ficheros.setMenuAbrirDom();
//        jfFich.setMenuAbrirDom();
//        jfFich.setVisible(true);
    }//GEN-LAST:event_MenuAbrirDomActionPerformed

    private void MenuAbrirSaxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuAbrirSaxActionPerformed
        if (!ficheros.isVisible()) {
            desktopPane.add(ficheros);
            ficheros.show();
        }
        ficheros.setMenuAbrirSax();

//        jfFich.setMenuAbrirSax();
//        jfFich.setVisible(true);
    }//GEN-LAST:event_MenuAbrirSaxActionPerformed

    private void MenuAbrirTextoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuAbrirTextoActionPerformed
        if (!ficheros.isVisible()) {
            desktopPane.add(ficheros);
            ficheros.show();
        }
        ficheros.setMenuAbrirTexto();
//        jfFich.setMenuAbrirTexto();
//        jfFich.setVisible(true);
    }//GEN-LAST:event_MenuAbrirTextoActionPerformed

    private void MenuCrearBDActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuCrearBDActionPerformed
        jfCrearBd.setVisible(true);
//        jfCrearBd.setMymdi(this);
    }//GEN-LAST:event_MenuCrearBDActionPerformed

    private void MenuConectarBDActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuConectarBDActionPerformed
        int opcion = jfileChooser.showOpenDialog(null);
        if (opcion == JFileChooser.APPROVE_OPTION) {
            File ficheroSeleccionado = jfileChooser.getSelectedFile();
            try {
                this.conectarBd(new DBManager(ficheroSeleccionado.getAbsolutePath()));
            } catch (Exception ex) {
                JOptionPane.showMessageDialog(null, "Se ha producido un error abriendo la base de datos " + ficheroSeleccionado.getName()
                        + "\nInténtelo de nuevo más tarde", "Conectando BD", JOptionPane.ERROR_MESSAGE);
                this.MenuDesconectarBDActionPerformed(evt);
            }
        }

    }//GEN-LAST:event_MenuConectarBDActionPerformed

    private void MenuDesconectarBDActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuDesconectarBDActionPerformed

        try {
            conectado.cerrar();
            MenuConectarBD.setEnabled(true);
            MenuCrearBD.setEnabled(true);
            MenuDesconectarBD.setEnabled(false);
            MenuEjecutarComandoBD.setEnabled(false);
            MenuPropiedadesBD.setEnabled(false);
            MenuRenombrarBD.setEnabled(false);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "No se ha podido cerrar la conexión con la Base de Datos\nReinicie el programa o inténtelo de nuevo", "Cerrando BD", JOptionPane.ERROR_MESSAGE);
        }
    }//GEN-LAST:event_MenuDesconectarBDActionPerformed

    private void MenuEjecutarComandoBDActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuEjecutarComandoBDActionPerformed
        String comando = JOptionPane.showInputDialog(null, "Escriba el comando a ejecutar", "Comando", JOptionPane.PLAIN_MESSAGE);

        if (!comando.equals("")) {
            conectado.ejecutarComando(comando);
        }
    }//GEN-LAST:event_MenuEjecutarComandoBDActionPerformed

    private void MenuRenombrarBDActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuRenombrarBDActionPerformed
        String nombreViejo = conectado.getMydb().getArchivoBD();
        try {
            //conectarBd(new DBManager(nombreViejo));
        } catch (Exception ex) {
            Logger.getLogger(MdiPrueba.class.getName()).log(Level.SEVERE, null, ex);
        }
        String nuevoNombre = JOptionPane.showInputDialog(null, "Escriba el nuevo nombre de archivo", "Renombrar", JOptionPane.PLAIN_MESSAGE);

        if (nuevoNombre != null && !nuevoNombre.isEmpty()) {

            MenuDesconectarBDActionPerformed(null);

            if (!nuevoNombre.contains(".sqlite")) {
                nuevoNombre += ".sqlite";
            }

            nuevoNombre.replaceAll(" ", "_");

            if (nombreViejo.contains("\\")) {
                nuevoNombre = nombreViejo.substring(0, nombreViejo.lastIndexOf("\\")) + "\\" + nuevoNombre;
            }
            File f1 = new File(nombreViejo);
            File f2 = new File(nuevoNombre);

            boolean renombrado = f1.renameTo(f2);
            if (renombrado) {
                JOptionPane.showMessageDialog(null, "Fichero renombrado correctamente.", "Renombrar", JOptionPane.PLAIN_MESSAGE);
                try {
                    conectarBd(new DBManager(nuevoNombre));
                } catch (Exception ex) {
                    JOptionPane.showMessageDialog(null, "Error al abrir el fichero", "Renombrar", JOptionPane.ERROR_MESSAGE);
                }
            } else {
                JOptionPane.showMessageDialog(null, "Error al renombrar el fichero.\n"
                        + "Para poder renombrarlo, no debe haber mostrado los campos\n"
                        + "Inténtelo de nuevo ahora", "Renombrar", JOptionPane.ERROR_MESSAGE);
                try {
                    conectarBd(new DBManager(nombreViejo));
                } catch (Exception ex) {
                    JOptionPane.showMessageDialog(null, "Error al abrir el fichero", "Renombrar", JOptionPane.ERROR_MESSAGE);
                }
            }
        }
    }//GEN-LAST:event_MenuRenombrarBDActionPerformed

    private void MenuPropiedadesBDActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuPropiedadesBDActionPerformed
        conectado.refrescar();
        conectado.show();
    }//GEN-LAST:event_MenuPropiedadesBDActionPerformed

    private void MenuSalirSalirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuSalirSalirActionPerformed
        int dialogResult = JOptionPane.showConfirmDialog(null, "¿Estás seguro de que quieres salir?", "Warning", JOptionPane.YES_NO_OPTION);

        if (dialogResult == JOptionPane.YES_OPTION) {
            System.exit(0);
        }
    }//GEN-LAST:event_MenuSalirSalirActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(MdiPrueba.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(MdiPrueba.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(MdiPrueba.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(MdiPrueba.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MdiPrueba().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenuItem MenuAbrirBinario;
    private javax.swing.JMenuItem MenuAbrirDom;
    private javax.swing.JMenuItem MenuAbrirSax;
    private javax.swing.JMenuItem MenuAbrirTexto;
    private javax.swing.JMenuItem MenuConectarBD;
    private javax.swing.JMenuItem MenuCrearBD;
    private javax.swing.JMenuItem MenuDesconectarBD;
    private javax.swing.JMenuItem MenuEjecutarComandoBD;
    private javax.swing.JMenuItem MenuPropiedadesBD;
    private javax.swing.JMenuItem MenuRenombrarBD;
    private javax.swing.JMenuItem MenuSalirSalir;
    private javax.swing.JMenuItem aboutMenuItem;
    private javax.swing.JDesktopPane desktopPane;
    private javax.swing.JMenu editMenu;
    private javax.swing.JMenu fileMenu;
    private javax.swing.JMenu helpMenu;
    private javax.swing.JDesktopPane jDesktopPane1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPopupMenu.Separator jSeparator1;
    private javax.swing.JPopupMenu.Separator jSeparator2;
    private javax.swing.JPopupMenu.Separator jSeparator3;
    private javax.swing.JMenuBar menuBar;
    // End of variables declaration//GEN-END:variables

    public void conectarBd(DBManager archivo) {
        if (conectado.abrir(archivo)) {
            //conectado.setMydb(new DBManager(ficheroSeleccionado.getAbsolutePath()));
            conectado.show();
            MenuCrearBD.setEnabled(false);
            MenuConectarBD.setEnabled(false);
            MenuDesconectarBD.setEnabled(true);
            MenuEjecutarComandoBD.setEnabled(true);
            MenuPropiedadesBD.setEnabled(true);
            MenuRenombrarBD.setEnabled(true);
        } else {
            JOptionPane.showMessageDialog(null, "No se ha podido conectar con la BD", "Conectando", JOptionPane.ERROR_MESSAGE);
        }
    }

    public void refrescarConectado() {
        conectado.refrescar();
        conectado.show();
    }

    void anyadir(JIntExaminarTabla jfeT, String nombreTabla) {
        jfeT.setTitle("Tabla: " + nombreTabla);
        desktopPane.add(jfeT);
        jfeT.show();
    }
}
